#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "../Trabalho3_Servidor/includes/model/ModoAbertura.h"

#include <QMainWindow>
#include <QListWidgetItem>
#include <QDebug>
#include <QPair>
#include <QList>
#include <QStringList>
#include <QMessageBox>
#include <QFileDialog>
#include <QInputDialog>

namespace Ui {
	class MainWindow;
}

class MainWindow : public QMainWindow
{
	Q_OBJECT
	public:
		explicit MainWindow(QWidget *parent = 0);
		~MainWindow();

		Q_INVOKABLE void getNomeUnidade();
		Q_INVOKABLE void getNomeCliente();
		Q_INVOKABLE void getNomeArquivoSelecionado( int );
		Q_INVOKABLE void getModoAbertura();
		Q_INVOKABLE void getPermissao( QString );
		Q_INVOKABLE void getNomeArquivo();
		Q_INVOKABLE void getNomeExtensao();
		Q_INVOKABLE void setValueProgressBar( int );
		Q_INVOKABLE void setMaxValueProgressBar( int );

		const static int LISTA_LOCAL, LISTA_SERVIDOR, LISTA_ABERTOS;
		static QString cliente, unidade, arquivo, extensao;
		static char modoAbertura;
		static bool permissao;

	private:
		Ui::MainWindow *ui;
		QListWidgetItem *ultimoItemLocal, *ultimoItemServidor, *ultimoItemAberto;
		QMenu *menuContexto;

		void adicionarArquivoLista( const QString&, model::ModoAbertura, QListWidget* );
		void adicionarArquivoLista( const QList<QPair<QString, model::ModoAbertura> >&, QListWidget* );
		void closeEvent( QCloseEvent* );
		void handleSelection( QListWidget*, QListWidgetItem*&, QListWidgetItem* );
	signals:
		// Acoes dos botoes que serao conectadas com a thread
		void conectar();
		void cadastrar();
		void montarUnidade();
		void logar();
		void deslogar();
		void sair();

		void listarArquivosLocais();
		void listarArquivos();
		void dadosArquivo();
		void adicionarArquivo();
		void adicionarArquivosPorExtensao();
		void abrirArquivo();
		void abrirArquivoPorExtensao();
		void fecharArquivo();
		void renomearArquivo();
		void apagarArquivo();
		void apagarArquivoPorExtensao();

	public slots:
		void handleSelectionLocais( QListWidgetItem* );
		void handleSelectionAbertos( QListWidgetItem* );
		void handleSelectionServidor( QListWidgetItem* );

		void showErro( const QString );
		void showSucesso( const QString );

		void showMessageStatusBar( const QString, int );

		void setConectado( bool );
		void setUnidade( const QString );
		void setLogado( const QString );
		void setDeslogado();
		void adicionarArquivoListaServidor( const QString&, model::ModoAbertura );
		void adicionarArquivoListaServidor( const QList<QPair<QString, model::ModoAbertura> > );
		void adicionarArquivoListaLocal( const QString );
		void adicionarArquivoListaLocal( const QList<QString> );
		void adicionarArquivoListaAbertos( const QString, model::ModoAbertura  );
		void adicionarArquivoListaAbertos( const QList<QPair<QString, model::ModoAbertura> > );
		void limparLista( const int );
		void removerArquivoLista( const QString, const int );

};

#endif // MAINWINDOW_H
